/**
* @addtogroup bts_fw_trans
* bts_fw_trans
* @{
*/
/**
* @file         bts_fw_trans.h
* @brief        
* @note
* @author       Akee(shengkun.you@hopechart.com,尤胜坤)
*
* @par          修改日志
* <table>
* <tr><th>Date        <th>Version               <th>Author                                    <th>Description
* <tr><td>2023-11-13  <td>1.0                   <td>Akee(ysk@hopechart.com,尤胜坤)            <td>创建初始版本
* @copyright    杭州鸿泉物联网技术股份有限公司
*/
#ifndef _BTS_FW_TRANS_H_
#define _BTS_FW_TRANS_H_
#include "ofc/ofc_types.h"
#include "ffc/ffc_stream.h"
#ifdef __cplusplus
extern "C" {
#endif

typedef void (*BtsFwTransDoFeedDogCallback)(void);

/**
 *   
 */
typedef struct TBtsFwTransParamTag TBtsFwTransParam;
struct TBtsFwTransParamTag
{
    UInt32 fw_size;
    UInt16 crc16_value;
};

/**
* 固件启动传输
* @note param: 固件的参数
* @param f_stream: 流接口
* @param buf: 缓冲，内部做临时上下文交换使用
* @param buf_len: 缓冲大小，需要调用者保证为等于页大小倍数
* @return >0: 实际写入数据; <0: 失败
*/
Int32 BtsFwTransStartup(TBtsFwTransParam *param, Bool is_program_part, TFfStream *f_stream, UInt8 *buf, Int32 buf_len);

/**
* 固件透传写数据
* @note 需要先调用BtsOpen和BtsFwTransStartup启动
* @param offset: app的代码偏移量
* @param data: app的数据
* @param size: 数据大小，需要调用者保证为写入的页大小倍数
* @return >0: 实际写入数据; <0: 失败
*/
Int32 BtsFwTransWriteFwData(Int32 offset, const char *data, Int32 size);

/**
* 固件透传读数据
* @note 需要先调用BtsOpen和BtsFwTransStartup启动
* @param offset: app的代码偏移量
* @param data: app的数据
* @param size: 数据大小，需要调用者保证为读出的页大小倍数
* @return >0: 实际读出数据; <0: 失败
*/
Int32 BtsFwTransReadFwData(Bool is_program_part, Int32 offset, char *data, Int32 size);

/**
* 校验固件透传备份区域的数据
* @param is_program_part: True: 本次编程的分域; False: 回滚的分区
* @param buf: 校验的临时缓冲，需要调用者保证为读取的页大小倍数，M7系列需要注意buf需要放到第一块内存; 如果传NULL，内部则会自动走动态内存
* @param buf_len: 缓冲大小
* @param feed_dog: 喂狗函数，可为NULL
* @return 
*/
Int32 BtsFwTransVerify(Bool is_program_part, UInt8 *buf, Int32 buf_len, BtsFwTransDoFeedDogCallback feed_dog);

Int32 BtsFwTransGetParam(Bool is_program_part, UInt8 *buf, Int32 buf_len, TBtsFwTransParam *param);


#ifdef __cplusplus
} // extern "C" {
#endif
#endif
/**
 * @} 
 */


